package arithmetic;

import org.junit.jupiter.api.Test;

/**
 * 删除元素：删除数组中指定值的元素，剩余的往前移动
 *
 * @author gaojie
 * @date 2022-03-05
 */
public class RemoveElement {

    @Test
    void test() {
        assert fun(new int[]{1, 2, 3}, 2) == 2;
        assert fun(new int[]{1, 2, 3, 3, 4}, 3) == 3;
        assert fun(new int[]{1, 2, 1, 3, 4}, 1) == 3;
    }

    /**
     * 1.遍历数组，比较元素的值
     * 2.若值相同，则不做处理
     * 3.若值不同，则新数组的长度加1
     * 4.若新数组长度小于当前数组下标，表示出现过相同元素，当前元素需要被前移
     *
     * @param nums 目标数组
     * @param val  需要删除的元素
     */
    int fun(int[] nums, int val) {
        int length = nums.length, count = 0;
        for (int i = 0; i < length; i++) {
            int num = nums[i];
            if (num != val) {
                if (count < i) {
                    nums[count] = num;
                }
                count++;
            }
        }
        return count;
    }
}
